package reflect;

/**
 * 利用反射机制调用Person类中所有公开且无参的方法
 * 思路:
 * 1:获取Person类对象
 * 2:通过类对象获取该类的所有方法:getMethods()
 * 3:通过每一个方法对象来得知该方法是否为公开的，无参的
 * 4:如果方法符合上述两点要求，则调用该方法:invoke
 */
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;



//调用Person中所有的public且无参的方法
public class Test {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, InvocationTargetException {
        //1:获取Person类对象
        Class c=Class.forName("reflect.Person");
        Object o = c.newInstance();
        //2:通过类对象获取该类的所有方法:getMethods()
        Method[] methods = c.getMethods();
        for(Method method : methods){//遍历所有方法
        //3:通过每一个方法对象来得知该方法是否为公开的，无参的

            if (method.getModifiers()==Modifier.PUBLIC&&method.getParameterCount()==0){
                System.out.println(method.getName()+"()"+"这个方法是public的是无参的");
                method.invoke(o);//调用该方法
            }


        }
    }}
